package br.com.gecandango.portlets.secao;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

import br.com.gecandango.beans.Equipe;
import br.com.gecandango.beans.Secao;
import br.com.gecandango.beans.Socio;

public class SecaoPortlet extends SecaoAction {

	static final Logger logger = Logger
	.getLogger(SecaoPortlet.class);
	
	public void processAction(ActionMapping mapping, ActionForm form,
			PortletConfig config, ActionRequest req, ActionResponse res)
			throws Exception {
		String acao = req.getParameter("acao");
		Secao secao = new Secao();
		if (acao.equals("add")){
			setForward(req, "portlet.ext.secao.edit");
		} else if (acao.equals("list")){
			req.setAttribute("LOB", getSecaoService().listByRamo("LOB"));
			req.setAttribute("ESC", getSecaoService().listByRamo("ESC"));
			req.setAttribute("SEN", getSecaoService().listByRamo("SEN"));
			req.setAttribute("PIO", getSecaoService().listByRamo("PIO"));
			setForward(req, "portlet.ext.secao.list");
		} else if (acao.equals("list_equipes_secao")){
			String id_secao = req.getParameter("id_secao");
			req.setAttribute("equipes_secao", getEquipeService().listBySecao(Long.parseLong(id_secao)));
			setForward(req, "portlet.ext.secao.list");
		} else if (acao.equals("edit_secao")){
			secao=getSecaoService().find(Long.parseLong(req
					.getParameter("id_secao")));
			req.setAttribute("secao", secao);
			req.setAttribute("equipes_secao", getEquipeService().listBySecao(secao.getId()));
			setForward(req, "portlet.ext.secao.edit");
		} else if (acao.equals("detalhar_secao")){
			secao=getSecaoService().find(Long.parseLong(req
					.getParameter("id_secao")));
			req.setAttribute("secao", secao);
			req.setAttribute("equipes_secao", getEquipeService().listBySecao(secao.getId()));
			setForward(req, "portlet.ext.secao.detail");
		} else if (acao.equals("delete_secao")){
			secao = getSecaoService().find(Long.parseLong(req
					.getParameter("id_secao")));
			getSecaoService().delete(secao);
			setForward(req, "portlet.ext.secao.list");
		} else if (acao.equals("salvar")){
			salvarSecao(req);
			setForward(req, "portlet.ext.secao.view");
		} else if(acao.equals("add_equipe")){
			Equipe equipe = salvarEquipe(req);
			req.setAttribute("secao", equipe.getSecao());
			req.setAttribute("equipes_secao", getEquipeService().listBySecao(equipe.getSecao().getId()));
			setForward(req, "portlet.ext.secao.edit");
		} else if(acao.equals("edit_equipe")){
				Equipe equipe = getEquipeService().find(Long.parseLong(req.getParameter("id_equipe")));
				req.setAttribute("equipe", equipe);	
				req.setAttribute("monitor", equipe.getMonitor());
				req.setAttribute("submonitor", equipe.getSubmonitor());
				req.setAttribute("membro3", equipe.getMembro3());
				req.setAttribute("membro4", equipe.getMembro4());
				req.setAttribute("membro5", equipe.getMembro5());
				req.setAttribute("membro6", equipe.getMembro6());
				req.setAttribute("membro7", equipe.getMembro7());
				req.setAttribute("membro8", equipe.getMembro8());
				req.setAttribute("secao", equipe.getSecao());
				req.setAttribute("equipes_secao", getEquipeService().listBySecao(equipe.getSecao().getId()));
				setForward(req, "portlet.ext.secao.edit_equipe");
		} else if(acao.equals("add_chefe")){
			Socio chefe = new Socio();
			chefe.setCategoria("Escotista");
			for (Socio e : getSocioService().find(chefe)) {
				logger.info("Socio: "+e.getNome());
			}
			req.setAttribute("escotistas", getSocioService().find(chefe));
			req.setAttribute("funcao", req.getParameter("funcao"));
			req.setAttribute("secao", getSecaoService().find(Long.parseLong(req.getParameter("id_secao"))));
			setForward(req, "portlet.ext.secao.list_socio");
		} else if(acao.equals("salvar_chefe")){	
			String idSocio = req.getParameter("id_socio");
			secao = getSecaoService().find(Long.parseLong(req.getParameter("id_secao")));
			String funcao = req.getParameter("funcao");
			if(funcao.equals("chefe")){
				secao.setChefe(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("ass1")){
				secao.setAssistente_1(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("ass2")){
				secao.setAssistente_2(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("ass3")){
				secao.setAssistente_3(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("ass4")){
				secao.setAssistente_4(getSocioService().find(Long.parseLong(idSocio)));
			}
			req.setAttribute("secao", getSecaoService().save(secao));
			req.setAttribute("equipes_secao", getEquipeService().listBySecao(Long.parseLong(req.getParameter("id_secao"))));
			setForward(req, "portlet.ext.secao.edit");
		} else if(acao.equals("salvar_equipe")){
			req.setAttribute("equipe", salvarEquipe(req));
		} else if(acao.equals("add_membro")){
			Socio esc = new Socio();
			esc.setCategoria("Beneficiario");
			for (Socio e : getSocioService().find(esc)) {
				logger.info("Socio: "+e.getNome());
			}
			req.setAttribute("escoteiros", getSocioService().find(esc));
			req.setAttribute("funcao", req.getParameter("funcao"));
			req.setAttribute("equipe", getEquipeService().find(Long.parseLong(req.getParameter("id_equipe"))));
			setForward(req, "portlet.ext.secao.list_escoteiros");
		} else if(acao.equals("salvar_membro")){	
			String idSocio = req.getParameter("id_socio");
			Equipe equipe = getEquipeService().find(Long.parseLong(req.getParameter("id_equipe")));
			String funcao = req.getParameter("funcao");
			if(funcao.equals("monitor")){
				equipe.setMonitor(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("submonitor")){
				equipe.setSubmonitor(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("membro3")){
				equipe.setMembro3(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("membro4")){
				equipe.setMembro4(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("membro5")){
				equipe.setMembro5(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("membro6")){
				equipe.setMembro6(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("membro7")){
				equipe.setMembro7(getSocioService().find(Long.parseLong(idSocio)));
			} else if(funcao.equals("membro8")){
				equipe.setMembro8(getSocioService().find(Long.parseLong(idSocio)));
			} 
			req.setAttribute("equipe", getEquipeService().save(equipe));
			setForward(req, "portlet.ext.secao.edit_equipe");
		} else {
			setForward(req, "portlet.ext.secao.view");
		}
	}
	public Secao salvarSecao(ActionRequest request){
		String id = (String) request.getParameter("id_secao");
		String nome = (String) request.getParameter("nome");
		String ramo = (String) request.getParameter("ramo");
		
		Secao secao = new Secao();
		
		if(id!= null && !id.equals("")){
			secao.setId(Long.parseLong(id));
		}
		secao.setNome(nome);
		secao.setRamo(ramo);
		secao.setAtiva(true);
		try {
			return getSecaoService().save(secao);
		} catch (Exception e) {
			return null;
		}		
	}
	public Equipe salvarEquipe(ActionRequest request){
		String nome = (String) request.getParameter("e_nome");
		String cores = (String) request.getParameter("e_cores");
		Equipe equipe = new Equipe();
		try {
			equipe.setId(Long.parseLong(request.getParameter("id_equipe")));
			equipe.setSecao(getSecaoService().find(Long.parseLong(request.getParameter("id_secao"))));
		} catch (Exception e) {
			Secao secao = salvarSecao(request);
			equipe.setSecao(secao);
			getSecaoService().save(secao);
		}
		equipe.setNome(nome);
		equipe.setCores(cores);
		equipe.setAtiva(true);
		return getEquipeService().save(equipe);	
	}
}
